/*
 * @Date: 2020-07-15 17:33:51
 * @LastEditTime: 2020-07-15 17:37:12
 * @Description: 各种校验
 * @FilePath: \vue\src\common\utilCheck.js
 */

// 验证字符,汉字按2个字符算
const character = function (str) {
    let strNum = 0
    let rsg = /^[\u4e00-\u9fa5]{0,}$/
    Array.from(str, function (item) {
        if (rsg.test(item)) {
            strNum += 2
        } else {
            strNum++
        }
    })
    return strNum
}

const checkID = function (ID) {
    if (typeof ID !== 'string') return '非法字符串'
    var city = {
        11: '北京',
        12: '天津',
        13: '河北',
        14: '山西',
        15: '内蒙古',
        21: '辽宁',
        22: '吉林',
        23: '黑龙江 ',
        31: '上海',
        32: '江苏',
        33: '浙江',
        34: '安徽',
        35: '福建',
        36: '江西',
        37: '山东',
        41: '河南',
        42: '湖北 ',
        43: '湖南',
        44: '广东',
        45: '广西',
        46: '海南',
        50: '重庆',
        51: '四川',
        52: '贵州',
        53: '云南',
        54: '西藏 ',
        61: '陕西',
        62: '甘肃',
        63: '青海',
        64: '宁夏',
        65: '新疆',
        71: '台湾',
        81: '香港',
        82: '澳门',
        91: '国外'
    }
    let birthday = ID.substr(6, 4) + '/' + Number(ID.substr(10, 2)) + '/' + Number(ID.substr(12, 2))
    let d = new Date(birthday)
    let newBirthday = d.getFullYear() + '/' + Number(d.getMonth() + 1) + '/' + Number(d.getDate())
    let currentTime = new Date().getTime()
    let time = d.getTime()
    let arrInt = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
    let arrCh = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
    let sum = 0,
        i, residue

    if (!/^\d{17}(\d|x)$/i.test(ID)) return '非法身份证'
    if (city[ID.substr(0, 2)] === undefined) return '非法地区'
    if (time >= currentTime || birthday !== newBirthday) return '非法生日'
    for (i = 0; i < 17; i++) {
        sum += ID.substr(i, 1) * arrInt[i]
    }
    residue = arrCh[sum % 11]
    if (residue !== ID.substr(17, 1)) return '非法身份证'
    return 'pass'
}

// 身份证加密
const encryptionId = function (idcard) {
    if (!idcard) return
    if (idcard.length == 15) {
        return idcard.replace(/(\d{6})\d{6}(\d{3})/, '$1******$2')
    } else {
        return idcard.replace(/(\d{5})\d{6}(\d{6})/, '$1******$2')
    }
}


export {
    character,
    checkID,
    encryptionId
}